<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Event extends CI_Controller {

    private $_data;

    function __construct() {
        parent::__construct();
        $this->load->model(array('eventmodel', 'companymodel', 'usermodel', 'boothmodel', 'event_comment_model'));

        if ($this->router->method != 'index' AND $this->router->method != 'view') {
            if (!isset($_SESSION['userLoggedIn'])) {
                //redirect();
            }
        }
        $this->load->helper(array('frontend', 'time'));
        $data['left_event'] = $this->eventmodel->getEvents(2, 0);
        $this->load->view('layout/frontend/element/fixed-left-bar.php', $data, true);
    }

    /**
     * Action index
     * Hiển thị danh sách tất cả sự kiện
     */
    public function index($param_month = null) {
        $data = "";
        $this->load->helper('frontend');
        $this->load->library(array('form_validation'));

        // Get ngày tháng hiện tại
        $data['month'] = strtoupper(date("M"));
        $data['year'] = date("Y");

        // Tạo calendar
        // Get current year, month and day
        list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-m-d'));

        // Get current year and month depending on possible GET parameters
        if (isset($param_month)) {
            list($iMonth, $iYear) = explode('-', $param_month);
            $iMonth = (int) $iMonth;
            $iYear = (int) $iYear;
        } else {
            list($iMonth, $iYear) = explode('-', date('n-Y'));
        }

        // Get name and number of days of specified month
        $iTimestamp = mktime(0, 0, 0, $iMonth, $iNowDay, $iYear);
        list($sMonthName, $iDaysInMonth) = explode('-', date('M-t', $iTimestamp));

        // Get previous year and month
        $iPrevYear = $iYear;
        $iPrevMonth = $iMonth - 1;
        if ($iPrevMonth <= 0) {
            $iPrevYear--;
            $iPrevMonth = 12;
            // set to December
        }

        // Get next year and month
        $iNextYear = $iYear;
        $iNextMonth = $iMonth + 1;
        if ($iNextMonth > 12) {
            $iNextYear++;
            $iNextMonth = 1;
        }

        // Get number of days of previous month
        $iPrevDaysInMonth = (int) date('t', mktime(0, 0, 0, $iPrevMonth, $iNowDay, $iPrevYear));

        // Get numeric representation of the day of the week of the first day of specified (current) month
        $iFirstDayDow = (int) date('w', mktime(0, 0, 0, $iMonth, 1, $iYear));

        // On what day the previous month begins
        $iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1;

        // If previous month
        $bPreviousMonth = ($iFirstDayDow > 0);

        // Initial day
        $iCurrentDay = ($bPreviousMonth) ? $iPrevShowFrom : 1;

        $bNextMonth = false;
        $sCalTblRows = '';

        // Generate rows for the calendar
        for ($i = 0; $i < 3; $i++) {// 6-weeks range
            $sCalTblRows .= '<tr>';
            for ($j = 0; $j < 14; $j++) {// 14 days 2 weeks
                $sClass = 'none';
                if ($iNowYear == $iYear && $iNowMonth == $iMonth && $iNowDay == $iCurrentDay && !$bPreviousMonth && !$bNextMonth) {
                    $sClass = 'today';
                } elseif (!$bPreviousMonth && !$bNextMonth) {
                    $sClass = 'current';
                }
                if ($sClass != 'none') {
                    // Check xem ngày đó có sự kiện gì không
                    // Nếu có thì đổi màu ô hiển thị
                    $javascript = "javascript: void(0)";
                    $start_time = date('Y-m-d H:i:s', strtotime($iYear . "-" . $iMonth . "-" . $iCurrentDay . " 00:00:00"));
                    $end_time = date('Y-m-d H:i:s', strtotime($iYear . "-" . $iMonth . "-" . $iCurrentDay . " 23:59:59"));
                    $data['event'] = $this->eventmodel->getEventByYearMonth($start_time, $end_time);
                    if (!empty($data['event'])) {
                        $sClass = 'hasEvent';
                        $javascript = "javascript: loadEvent({$iYear},{$iMonth},{$iCurrentDay})";
                    }
                    if ($j == 0 || $j == 7) {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '" style="color:red;"><span>' . $iCurrentDay . '</span></a></td>';
                    } else if ($j == 6 || $j == 13) {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '" style="color:#0044cc;"><span>' . $iCurrentDay . '</span></a></td>';
                    } else {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '"><span>' . $iCurrentDay . '</span></a></td>';
                    }
                } else {
                    $sCalTblRows .= '<td class="' . $sClass . '"><a href="javascript: void(0)" style="height: 43px;"></a></td>';
                }

                // Next day
                $iCurrentDay++;
                if ($bPreviousMonth && $iCurrentDay > $iPrevDaysInMonth) {
                    $bPreviousMonth = false;
                    $iCurrentDay = 1;
                }
                if (!$bPreviousMonth && !$bNextMonth && $iCurrentDay > $iDaysInMonth) {
                    $bNextMonth = true;
                    $iCurrentDay = 1;
                }
            }
            $sCalTblRows .= '</tr>';
        }

        // Prepare replacement keys and generate the calendar
        $aKeys = array('__prev_month__' => "{$iPrevMonth}-{$iPrevYear}", '__next_month__' => "{$iNextMonth}-{$iNextYear}", '__cal_caption__' => $sMonthName . ', ' . $iYear, '__cal_rows__' => $sCalTblRows,);
        $data['prev_month'] = "{$iPrevMonth}-{$iPrevYear}";
        $data['next_month'] = "{$iNextMonth}-{$iNextYear}";
        $data['current_month'] = substr(strtoupper($sMonthName), 0, 3) . ' - ' . $iYear;
        $sCalendarItself = strtr(file_get_contents(base_url('theme/third_party/calendar/templates/calendar.html')), $aKeys);

        // AJAX requests - return the calendar
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_GET['month'])) {
            header('Content-Type: text/html; charset=utf-8');
            echo $sCalendarItself;
            exit;
        }

        $aVariables = array('__calendar__' => $sCalendarItself,);
        $data['calendar'] = strtr(file_get_contents(base_url('theme/third_party/calendar/templates/index.html')), $aVariables);

        $this->_data['content'] = $this->load->view('/event/index', $data, true);
        $this->load->view('layout/frontend/index', $this->_data);
    }

    // Use to reload calendar
    public function calendar($param_month = null) {
        // Get current year, month and day
        list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-m-d'));

        // Get current year and month depending on possible GET parameters
        if (isset($param_month)) {
            list($iMonth, $iYear) = explode('-', $param_month);
            $iMonth = (int) $iMonth;
            $iYear = (int) $iYear;
        } else {
            list($iMonth, $iYear) = explode('-', date('n-Y'));
        }

        // Get name and number of days of specified month
        $iTimestamp = mktime(0, 0, 0, $iMonth, $iNowDay, $iYear);
        list($sMonthName, $iDaysInMonth) = explode('-', date('F-t', $iTimestamp));

        // Get previous year and month
        $iPrevYear = $iYear;
        $iPrevMonth = $iMonth - 1;
        if ($iPrevMonth <= 0) {
            $iPrevYear--;
            $iPrevMonth = 12;
            // set to December
        }

        // Get next year and month
        $iNextYear = $iYear;
        $iNextMonth = $iMonth + 1;
        if ($iNextMonth > 12) {
            $iNextYear++;
            $iNextMonth = 1;
        }

        // Get number of days of previous month
        $iPrevDaysInMonth = (int) date('t', mktime(0, 0, 0, $iPrevMonth, $iNowDay, $iPrevYear));

        // Get numeric representation of the day of the week of the first day of specified (current) month
        $iFirstDayDow = (int) date('w', mktime(0, 0, 0, $iMonth, 1, $iYear));

        // On what day the previous month begins
        $iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1;

        // If previous month
        $bPreviousMonth = ($iFirstDayDow > 0);

        // Initial day
        $iCurrentDay = ($bPreviousMonth) ? $iPrevShowFrom : 1;

        $bNextMonth = false;
        $sCalTblRows = '';

        // Generate rows for the calendar
        for ($i = 0; $i < 3; $i++) {// 6-weeks range
            $sCalTblRows .= '<tr>';
            for ($j = 0; $j < 14; $j++) {// 14 days 2 weeks
                $sClass = 'none';
                if ($iNowYear == $iYear && $iNowMonth == $iMonth && $iNowDay == $iCurrentDay && !$bPreviousMonth && !$bNextMonth) {
                    $sClass = 'today';
                } elseif (!$bPreviousMonth && !$bNextMonth) {
                    $sClass = 'current';
                }
                if ($sClass != 'none') {
                    // Check xem ngày đó có sự kiện gì không
                    // Nếu có thì đổi màu ô hiển thị
                    $javascript = "javascript: void(0)";
                    $start_time = date('Y-m-d H:i:s', strtotime($iYear . "-" . $iMonth . "-" . $iCurrentDay . " 00:00:00"));
                    $end_time = date('Y-m-d H:i:s', strtotime($iYear . "-" . $iMonth . "-" . $iCurrentDay . " 23:59:59"));
                    $data['event'] = $this->eventmodel->getEventByYearMonth($start_time, $end_time);
                    if (!empty($data['event'])) {
                        $sClass = 'hasEvent';
                        $javascript = "javascript: loadEvent({$iYear},{$iMonth},{$iCurrentDay})";
                    }
                    if ($j == 0 || $j == 7) {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '" style="color:red;"><span>' . $iCurrentDay . '</span></a></td>';
                    } else if ($j == 6 || $j == 13) {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '" style="color:#0044cc;"><span>' . $iCurrentDay . '</span></a></td>';
                    } else {
                        $sCalTblRows .= '<td class="' . $sClass . '"><a href="' . $javascript . '"><span>' . $iCurrentDay . '</span></a></td>';
                    }
                } else {
                    $sCalTblRows .= '<td class="' . $sClass . '"><a href="javascript: void(0)" style="height: 43px;"></a></td>';
                }

                // Next day
                $iCurrentDay++;
                if ($bPreviousMonth && $iCurrentDay > $iPrevDaysInMonth) {
                    $bPreviousMonth = false;
                    $iCurrentDay = 1;
                }
                if (!$bPreviousMonth && !$bNextMonth && $iCurrentDay > $iDaysInMonth) {
                    $bNextMonth = true;
                    $iCurrentDay = 1;
                }
            }
            $sCalTblRows .= '</tr>';
        }

        // Prepare replacement keys and generate the calendar
        $aKeys = array('__prev_month__' => "{$iPrevMonth}-{$iPrevYear}", '__next_month__' => "{$iNextMonth}-{$iNextYear}", '__cal_caption__' => $sMonthName . ', ' . $iYear, '__cal_rows__' => $sCalTblRows, '__cal_upper__' => strtoupper($sMonthName) . ' - ' . $iYear);
        $sCalendarItself = strtr(file_get_contents(base_url('theme/third_party/calendar/templates/calendar.html')), $aKeys);

        // AJAX requests - return the calendar
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_GET['month'])) {
            header('Content-Type: text/html; charset=utf-8');
            echo $sCalendarItself;
            exit;
        }

        $aVariables = array('__calendar__' => $sCalendarItself,);
        echo strtr(file_get_contents(base_url('theme/third_party/calendar/templates/index.html')), $aVariables);
    }

    // Use to reload control of calendar
    public function month($param_month = null) {
        // Get current year, month and day
        list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-m-d'));

        // Get current year and month depending on possible GET parameters
        if (isset($param_month)) {
            list($iMonth, $iYear) = explode('-', $param_month);
            $iMonth = (int) $iMonth;
            $iYear = (int) $iYear;
        } else {
            list($iMonth, $iYear) = explode('-', date('n-Y'));
        }

        // Get name and number of days of specified month
        $iTimestamp = mktime(0, 0, 0, $iMonth, $iNowDay, $iYear);
        list($sMonthName, $iDaysInMonth) = explode('-', date('F-t', $iTimestamp));

        // Get previous year and month
        $iPrevYear = $iYear;
        $iPrevMonth = $iMonth - 1;
        if ($iPrevMonth <= 0) {
            $iPrevYear--;
            $iPrevMonth = 12;
            // set to December
        }

        // Get next year and month
        $iNextYear = $iYear;
        $iNextMonth = $iMonth + 1;
        if ($iNextMonth > 12) {
            $iNextYear++;
            $iNextMonth = 1;
        }

        // Get number of days of previous month
        $iPrevDaysInMonth = (int) date('t', mktime(0, 0, 0, $iPrevMonth, $iNowDay, $iPrevYear));

        // Get numeric representation of the day of the week of the first day of specified (current) month
        $iFirstDayDow = (int) date('w', mktime(0, 0, 0, $iMonth, 1, $iYear));

        // On what day the previous month begins
        $iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1;

        // If previous month
        $bPreviousMonth = ($iFirstDayDow > 0);

        // Initial day
        $iCurrentDay = ($bPreviousMonth) ? $iPrevShowFrom : 1;

        // Prepare replacement keys and generate the calendar
        $aKeys = array('__prev_month__' => "{$iPrevMonth}-{$iPrevYear}", '__next_month__' => "{$iNextMonth}-{$iNextYear}", '__cal_caption__' => $sMonthName . ', ' . $iYear, '__cal_upper__' => substr(strtoupper($sMonthName), 0, 3) . ' - ' . $iYear);
        $sCalendarItself = strtr(file_get_contents(base_url('theme/third_party/calendar/templates/month.html')), $aKeys);
        echo $sCalendarItself;
        // AJAX requests - return the calendar
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_GET['month'])) {
            header('Content-Type: text/html; charset=utf-8');
            echo $sCalendarItself;
            exit;
        }
    }

    /*
     * Action company
     * Tạo sự kiện dành cho công ty
     */

    public function company($id = null) {
        $this->load->helper('frontend');
        $this->load->library(array('form_validation'));
        $data['company'] = $this->companymodel->getCompanyByUserId((int) $_SESSION['userLoggedIn']['id']);
        if (!$data['company']) {
            $this->session->set_flashdata('message', 'Vui lòng tạo công ty trước khi truy cập vào trang này!');
            redirect();
        } else {
            // Lấy id của company tương ứng với user
            $company_id = $data['company']['company_id'];
            $data['json'] = "";
            // Lấy thông tin về sự kiện theo Id tương ứng (nếu có)
            if (isset($id)) {
                $result = "";
                $data['event'] = $this->eventmodel->getEventById((int) $id);
                if (isset($data['event']) && $data['event'] != "") {
                    $invited = explode(',', $data['event']['invite']);
                    if (isset($invited[0]) && $invited[0] != "") {
                        for ($i = 0; $i < count($invited); $i++) {
                            $result[$i]['id'] = $invited[$i];
                            $data['user'] = $this->usermodel->getUserById($invited[$i]);
                            $result[$i]['name'] = $data['user']['real_name'];
                        }
                    }
                }
                $json_response = json_encode($result);
                $data['json'] = $json_response;
            }
            // Event là chưa được tạo, khởi tạo các giá trị cho edit là empty
            if (!isset($data['event'])) {
                $data['event'] = array('id' => '', 'name' => '', 'content' => '', 'address' => '', 'image' => '', 'participation' => '', 'invite' => '', 'time_event' => '', 'type' => '1', 'cid' => '',);
            }
            if (empty($data['event'])) {
                $this->session->set_flashdata('message', 'Trang bạn muốn truy cập không tồn tại!');
                redirect('/event/company');
            }
            // Nếu event đã có người được mời
            // TẠM THỜI BỎ PHẦN NÀY
            /* $data['user'] = $this->usermodel->getAllUserExceptCurrent((int) $_SESSION['userLoggedIn']['id']);
              if ($data['user']) {
              $data['user_name'] = $data['user'][0]['real_name'];
              $data['user_id'] = $data['user'][0]['user_id'];
              if (count($data['user']) > 1) {
              for ($i = 1; $i < count($data['user']); $i++) {
              $data['user_name'] .= ',' . $data['user'][$i]['real_name'];
              $data['user_id'] .= ',' . $data['user'][$i]['user_id'];
              }
              }
              } */

            $_POST['cid'] = $company_id;
            $_POST['type'] = '1';
            if (isset($_POST['event-submit'])) {
                unset($_POST['event-submit']);
                $this->_addInfor($data, $_POST['type']);
            } else {
                $this->_data['content'] = $this->load->view('/event/company', $data, true);
                $this->load->view('layout/frontend/index', $this->_data);
            }
        }
    }

    /*
     * Action company
     * Tạo sự kiện dành cho gian hàng
     */

    public function booth($id = null) {
        $this->load->helper('frontend');
        $this->load->library(array('form_validation'));
        $data['booth'] = $this->boothmodel->getBoothByUserId((int) $_SESSION['userLoggedIn']['id']);
        if (!$data['booth']) {
            $this->session->set_flashdata('message', 'Vui lòng tạo gian hàng trước khi truy cập vào trang này!');
            redirect();
        } else {
            // Lấy id của gian hàng tương ứng với user
            $booth_id = $data['booth']['id'];
            $data['json'] = "";
            // Lấy thông tin về sự kiện theo Id tương ứng (nếu có)
            if (isset($id)) {
                $result = "";
                $data['event'] = $this->eventmodel->getEventById((int) $id);
                if (isset($data['event']) && $data['event'] != "") {
                    $invited = explode(',', $data['event']['invite']);
                    if (isset($invited[0]) && $invited[0] != "") {
                        for ($i = 0; $i < count($invited); $i++) {
                            $result[$i]['id'] = $invited[$i];
                            $data['user'] = $this->usermodel->getUserById($invited[$i]);
                            $result[$i]['name'] = $data['user']['real_name'];
                        }
                    }
                }
                $json_response = json_encode($result);
                $data['json'] = $json_response;
            }
            // Event là chưa được tạo, khởi tạo các giá trị cho edit là empty
            if (!isset($data['event'])) {
                $data['event'] = array('id' => '', 'name' => '', 'content' => '', 'address' => '', 'image' => '', 'participation' => '', 'invite' => '', 'time_event' => '', 'type' => '1', 'cid' => '',);
            }
            if (empty($data['event'])) {
                $this->session->set_flashdata('message', 'Trang bạn muốn truy cập không tồn tại!');
                redirect('/event/booth');
            }
            // Nếu event đã có người được mời
            // TẠM THỜI BỎ PHẦN NÀY
            /* $data['user'] = $this->usermodel->getAllUserExceptCurrent((int) $_SESSION['userLoggedIn']['id']);
              if ($data['user']) {
              $data['user_name'] = $data['user'][0]['real_name'];
              $data['user_id'] = $data['user'][0]['user_id'];
              if (count($data['user']) > 1) {
              for ($i = 1; $i < count($data['user']); $i++) {
              $data['user_name'] .= ',' . $data['user'][$i]['real_name'];
              $data['user_id'] .= ',' . $data['user'][$i]['user_id'];
              }
              }
              } */

            $_POST['cid'] = $booth_id;
            $_POST['type'] = '2';
            if (isset($_POST['event-submit'])) {
                unset($_POST['event-submit']);
                $this->_addInfor($data, $_POST['type']);
            } else {
                $this->_data['content'] = $this->load->view('/event/booth', $data, true);
                $this->load->view('layout/frontend/index', $this->_data);
            }
        }
    }

    private function _addInfor($data, $type) {
        if (isset($_POST['id'])) {
            $event_id = $_POST['id'];
            unset($_POST['id']);
        }
        if (isset($_POST['invite_check'])) {
            unset($_POST['invite_check']);
        }
        $isUniqueName = '';
        //(isset($company_id) && $_POST['name'] == $data['company']['name']) ? '' : '|is_unique[companys.name]';

        $this->form_validation->set_rules('name', 'Tên sự kiện', 'trim|xss_clean' . $isUniqueName);
        $this->form_validation->set_rules('content', 'Chi tiết', 'trim|xss_clean');
        $this->form_validation->set_rules('address', 'Địa điểm', 'trim|xss_clean');
        $this->form_validation->set_rules('time_event', 'Thời gian', 'trim|xss_clean');

        if ($this->form_validation->run() == FALSE) {// not validate form
            $this->_data['content'] = $this->load->view('event/company', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        } else {
            if (!empty($event_id)) {
                $this->eventmodel->update($event_id, $_POST);
                $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
                if ($type == 1) {
                    redirect('/event/company/' . $event_id);
                } else {
                    redirect('/event/booth/' . $event_id);
                }
            } else {
                $this->eventmodel->add($_POST);
                $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
                if ($type == 1) {
                    redirect('/event/index');
                } else {
                    redirect('/event/index');
                }
            }
        }
    }

    public function ajaxUpload() {
        error_reporting(0);
        $max_filesize = 2097152;
        // Maximum filesize in BYTES.
        $allowed_filetypes = array('.jpg', '.jpeg', '.gif', '.png');
        // These will be the types of file that will pass the validation.
        $filename = $_FILES['userfile']['name'];
        // Get the name of the file (including file extension).
        $ext = substr($filename, strpos($filename, '.'), strlen($filename) - 1);
        // Get the extension from the filename.
        $file_strip = str_replace(" ", "_", $filename);
        //Strip out spaces in filename
        $upload_path = 'upload/event/banner/';
        //Set upload path
        // Check if the filetype is allowed, if not DIE and inform the user.
        if (!in_array($ext, $allowed_filetypes)) {
            die('<div class="error">File không hợp lệ. Hãy chọn file khác!</div>');
        }
        // Now check the filesize, if it is too large then DIE and inform the user.
        if (filesize($_FILES['userfile']['tmp_name']) > $max_filesize) {
            die('<div class="error">File quá lớn. Hãy chọn file khác!</div>');
        }
        // Check if we can upload to the specified path, if not DIE and inform the user.
        if (!is_writable($upload_path)) {
            die('<div class="error">Upload không thành công. Vui lòng check lại permission!</div>');
        }
        // Move the file if eveything checks out.
        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_path . $file_strip)) {
            echo '<div class="success" style="display:none;">' . base_url($upload_path . $file_strip) . '</div>';
            echo '<input type="hidden" class="hidden" name="image" style="display:none;" value="' . $upload_path . $file_strip . '"/>';
            // It worked.
        } else {
            echo '<div class="error">Upload không thành công. Hãy chọn file khác!</div>';
            // It failed :(.
        }
    }

    public function delete($id = null) {
        if (isset($id)) {
            $this->eventmodel->delete($id);
            $this->session->set_flashdata('message', 'Đã huỷ bỏ sự kiện thành công!');
            redirect('/event/index');
        }
    }

    public function search($year = null, $month = null, $c_id = null, $type = null) {
        $this->load->helper('frontend');
        $this->load->library(array('form_validation'));
        if (isset($year)) {
            if (!isset($month)) {
                $month = 1;
            }
            if ($month == 12) {
                $next_month = 1;
                $next_year = $year + 1;
                $prev_month = $month - 1;
                $prev_year = $year;
            } else if ($month == 1) {
                $next_month = $month + 1;
                $next_year = $year;
                $prev_month = 12;
                $prev_year = $year - 1;
            } else {
                $next_month = $month + 1;
                $next_year = $year;
                $prev_month = $month - 1;
                $prev_year = $year;
            }
            $start_time = date('Y-m-d H:i:s', strtotime($year . "-" . $month . "-1 00:00:00"));
            $end_time = date('Y-m-d H:i:s', strtotime($next_year . "-" . $next_month . "-1 00:00:00"));
            $data['event'] = $this->eventmodel->getEventByYearMonth($start_time, $end_time);
            //Nếu là list sự kiện của doanh nghiệp
            if($c_id != null) {
                $data['event'] = $this->eventmodel->getEventByYearMonthAndCIdAndType($start_time, $end_time, $c_id, $type);
                $data['cid'] = $c_id;
                $data['type'] = $type;
            }
            // Get số người tham gia sự kiện
            if (!empty($data['event'])) {
                for ($i = 0; $i < count($data['event']); $i++) {
                    if ($data['event'][$i]['type'] == 1) {
                        $company_id = $data['event'][$i]['cid'];
                        $data['company'] = $this->companymodel->getCompanyById($company_id);
                        if(isset($_SESSION['userLoggedIn']['id'])) {
                            $company_check = $this->companymodel->getCompanyByUserId((int) $_SESSION['userLoggedIn']['id']);
                            if (isset($company_check) && $company_check != "") {
                                if ($company_id == $company_check['company_id']) {
                                    $data['event'][$i]['current_user'] = 1;
                                }
                            }
                        }
                    } else {
                        $booth_id = $data['event'][$i]['cid'];
                        $data['booth'] = $this->boothmodel->getBoothById($booth_id);
                        if(isset($_SESSION['userLoggedIn']['id'])) {
                        $booth_check = $this->boothmodel->getBoothByUserId((int) $_SESSION['userLoggedIn']['id']);
                            if (isset($booth_check) && $booth_check != "") {
                                if ($booth_id == $booth_check['id']) {
                                    $data['event'][$i]['current_user'] = 1;
                                }
                            }
                        }
                    }
                    if (isset($data['event'][$i]['not_participation']) && $data['event'][$i]['not_participation'] != "") {
                        $notpar_list = explode(',', $data['event'][$i]['not_participation']);
                        if (isset($_SESSION['userLoggedIn']['id'])) {
                            if ($this->_inArray((int) $_SESSION['userLoggedIn']['id'], $notpar_list)) {
                                $data['event'][$i]['current_not_participation'] = 1;
                            }
                        }
                    }
                    if (isset($data['event'][$i]['participation']) && $data['event'][$i]['participation'] != "") {
                        $par_list = explode(',', $data['event'][$i]['participation']);
                        if (isset($_SESSION['userLoggedIn'])) {
                            if ($this->_inArray((int) $_SESSION['userLoggedIn']['id'], $par_list)) {
                                $data['event'][$i]['current_participation'] = 1;
                            }
                        }
                        $data['event'][$i]['count'] = count($par_list);
                        if ($data['event'][$i]['count'] < 10) {
                            $data['event'][$i]['count'] = "0" . $data['event'][$i]['count'];
                        }
                    } else {
                        $data['event'][$i]['count'] = 0;
                    }
                    $date = date('D', strtotime($data['event'][$i]['time_event']));
                    $data['event'][$i]['time_event'] = date('h:m d/m/Y', strtotime($data['event'][$i]['time_event']));
                    switch ($date) {
                        case "Mon" :
                            $data['event'][$i]['day'] = "Thứ 2";
                            break;
                        case "Tue" :
                            $data['event'][$i]['day'] = "Thứ 3";
                            break;
                        case "Wed" :
                            $data['event'][$i]['day'] = "Thứ 4";
                            break;
                        case "Thu" :
                            $data['event'][$i]['day'] = "Thứ 5";
                            break;
                        case "Fri" :
                            $data['event'][$i]['day'] = "Thứ 6";
                            break;
                        case "Sat" :
                            $data['event'][$i]['day'] = "Thứ 7";
                            break;
                        case "Sun" :
                            $data['event'][$i]['day'] = "Chủ nhật";
                            break;
                    }
                }
            }

            if ($month > 12 || $month < 1 || !is_numeric($month) || !is_numeric($year)) {
                $this->session->set_flashdata('message', 'Dữ liệu tìm kiếm không tồn tại!');
                redirect();
            }
            $data['year'] = $year;
            switch ($month) {
                case 1 :
                    $data['month'] = 'January';
                    break;
                case 2 :
                    $data['month'] = 'February';
                    break;
                case 3 :
                    $data['month'] = 'March';
                    break;
                case 4 :
                    $data['month'] = 'April';
                    break;
                case 5 :
                    $data['month'] = 'May';
                    break;
                case 6 :
                    $data['month'] = 'June';
                    break;
                case 7 :
                    $data['month'] = 'July';
                    break;
                case 8 :
                    $data['month'] = 'August';
                    break;
                case 9 :
                    $data['month'] = 'September';
                    break;
                case 10 :
                    $data['month'] = 'October';
                    break;
                case 11 :
                    $data['month'] = 'November';
                    break;
                case 12 :
                    $data['month'] = 'December';
                    break;
            }
            $data['next_year'] = $next_year;
            $data['next_month'] = $next_month;
            $data['prev_year'] = $prev_year;
            $data['prev_month'] = $prev_month;
        } else {
            $this->session->set_flashdata('message', 'Trang bạn muốn truy cập không tồn tại!');
            redirect();
        }
        $this->_data['content'] = $this->load->view('/event/search', $data, true);
        $this->load->view('layout/frontend/index', $this->_data);
    }

    public function eventinfo($year = null, $month = null, $day = null) {
        if (!empty($year) && !empty($month) && !empty($day)) {
            $start_time = date('Y-m-d H:i:s', strtotime($year . "-" . $month . "-" . $day . " 00:00:00"));
            $end_time = date('Y-m-d H:i:s', strtotime($year . "-" . $month . "-" . $day . " 23:59:59"));
            $data['event'] = $this->eventmodel->getEventByYearMonth($start_time, $end_time);

            // Get số người tham gia sự kiện
            if (!empty($data['event'])) {
                for ($i = 0; $i < count($data['event']); $i++) {
                    if (empty($data['event'][$i]['image'])) {
                        $data['event'][$i]['image'] = 'theme/images/sample/event/340x184.jpg';
                    }
                    if (strlen($data['event'][$i]['content']) > 500) {
                        $data['event'][$i]['content'] = substr($data['event'][$i]['content'], 0, 500) . '...';
                    }
                    if (isset($data['event'][$i]['participation']) && $data['event'][$i]['participation'] != "") {
                        $par_list = explode(',', $data['event'][$i]['participation']);
                        $data['event'][$i]['count'] = count($par_list);
                        if ($data['event'][$i]['count'] < 10) {
                            $data['event'][$i]['count'] = "0" . $data['event'][$i]['count'];
                        }
                    } else {
                        $data['event'][$i]['count'] = 0;
                    }
                    $date = date('D', strtotime($data['event'][$i]['time_event']));
                    $data['event'][$i]['time_event'] = date('h:m d/m/Y', strtotime($data['event'][$i]['time_event']));
                    switch ($date) {
                        case "Mon" :
                            $data['event'][$i]['day'] = "Thứ 2";
                            break;
                        case "Tue" :
                            $data['event'][$i]['day'] = "Thứ 3";
                            break;
                        case "Wed" :
                            $data['event'][$i]['day'] = "Thứ 4";
                            break;
                        case "Thu" :
                            $data['event'][$i]['day'] = "Thứ 5";
                            break;
                        case "Fri" :
                            $data['event'][$i]['day'] = "Thứ 6";
                            break;
                        case "Sat" :
                            $data['event'][$i]['day'] = "Thứ 7";
                            break;
                        case "Sun" :
                            $data['event'][$i]['day'] = "Chủ nhật";
                            break;
                    }
                }
            }
            if (isset($data['event']) && $data['event'] != "") {
                $string = "";
                for ($i = 0; $i < count($data['event']); $i++) {
                    $string .= '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><div id="event-info">
                                    <div class="title">
					<div class="title-name">Sự kiện</div>
					<div class="title-time">' . $data['event'][$i]['day'] . ': ' . $data['event'][$i]['time_event'] . '</div>
                                    </div>';
                    $string .= '<div class="event-info-content">
                                    <div class="event-info-content-left">
					<div class="content">
                                            <div style="margin-bottom:20px;"><h4>' . $data['event'][$i]['name'] . '</h4></div>';
                    $string .= '<p class="participation">' . $data['event'][$i]['count'] . ' người tham gia sự kiện</p>';
                    $string .= '<p class="address">' . $data['event'][$i]['address'] . '</p>';
                    $string .= '<div class="button">
                                    <button class="btn btn-primary btn-event-cancel" type="button" onclick="cancelevent(' . $data['event'][$i]['id'] . ');">
					Hủy
                                    </button>
                                    <button class="btn btn-primary btn-event" name="change" onclick="change(' . $data['event'][$i]['id'] . ',' . $data['event'][$i]['type'] . ');" value="Sửa đổi">
					Sửa đổi
                                    </button>
				</div>';
                    $string .= '</div></div>';
                    $string .= '<div class="event-info-content-right"><img src="' . base_url($data['event'][$i]['image']) . '" /></div>';
                    $string .= '<div class="event-info-content-read">' . nl2br(htmlspecialchars($data['event'][$i]['content'])) . '</div>';
                    $string .= '<div class="read-more"><ul><li><a class="more" rel="eventPopup[ajax]" href="/event/view/true/' . $data['event'][$i]['id'] . '" data-url="/event/view/true/' . $data['event'][$i]['id'] . ' ">Xem tiếp...</a></li></ul></div></div></div>';
                    $string .= '<input type="hidden" name="id" value="' . $data['event'][$i]['id'] . '" />';
                }

                echo $string;
            }
        } else {
            redirect();
        }
    }

    public function alluser() {
        $data['user'] = $this->usermodel->getNameAllUserExceptCurrent((int) $_SESSION['userLoggedIn']['id']);
        $json_response = json_encode($data['user']);
        echo $json_response;
    }

    /**
     * Action view
     * Xem chi tiết thông tin
     */
    public function view($isAjax = FALSE, $eventId) {
        $this->load->helper('frontend');
        $this->load->helper('user_helper');

        if ($isAjax) {
            $data['event'] = $this->eventmodel->getEventById($eventId);
            if (isset($data['event'])) {
                if ($data['event']['type'] == 1) {
                    $company_id = $data['event']['cid'];
                    $data['company'] = $this->companymodel->getCompanyById($company_id);
                    if(isset($_SESSION['userLoggedIn']['id'])) {
                        $company_check = $this->companymodel->getCompanyByUserId((int) $_SESSION['userLoggedIn']['id']);
                        if (isset($company_check['company_id']) && $company_check['company_id'] != "") {
                            if ($company_id == $company_check['company_id']) {
                                $data['current_user'] = 1;
                            }
                        }
                    }
                } else {
                    $booth_id = $data['event']['cid'];
                    $data['booth'] = $this->boothmodel->getBoothById($booth_id);
                    if(isset($_SESSION['userLoggedIn']['id'])) {
                        $booth_check = $this->boothmodel->getBoothByUserId((int) $_SESSION['userLoggedIn']['id']);
                        if (isset($booth_check) && $booth_check != "") {
                            if ($booth_id == $booth_check['id']) {
                                $data['current_user'] = 1;
                            }
                        }
                    }
                }
                // Get số người tham gia sự kiện
                if (!empty($data['event'])) {
                    if (empty($data['event']['image'])) {
                        $data['event']['image'] = 'theme/images/sample/event/340x184.jpg';
                    }
                    if (isset($data['event']['not_participation']) && $data['event']['not_participation'] != "") {
                        $notpar_list = explode(',', $data['event']['not_participation']);
                        if ($this->_inArray((int) $_SESSION['userLoggedIn']['id'], $notpar_list)) {
                            $data['current_not_participation'] = 1;
                        }
                    }
                    if (isset($data['event']['participation']) && $data['event']['participation'] != "") {
                        $par_list = explode(',', $data['event']['participation']);
                        if (isset($_SESSION['userLoggedIn']['id']) && $this->_inArray((int) $_SESSION['userLoggedIn']['id'], $par_list)) {
                            $data['current_participation'] = 1;
                        }
                        $data['event']['count'] = count($par_list);
                        if ($data['event']['count'] < 10) {
                            $data['event']['count'] = "0" . $data['event']['count'];
                        }
                    } else {
                        $data['event']['count'] = 0;
                    }
                    $date = date('D', strtotime($data['event']['time_event']));
                    $data['event']['time_event'] = date('h:m d/m/Y', strtotime($data['event']['time_event']));
                    switch ($date) {
                        case "Mon" :
                            $data['event']['day'] = "Thứ 2";
                            break;
                        case "Tue" :
                            $data['event']['day'] = "Thứ 3";
                            break;
                        case "Wed" :
                            $data['event']['day'] = "Thứ 4";
                            break;
                        case "Thu" :
                            $data['event']['day'] = "Thứ 5";
                            break;
                        case "Fri" :
                            $data['event']['day'] = "Thứ 6";
                            break;
                        case "Sat" :
                            $data['event']['day'] = "Thứ 7";
                            break;
                        case "Sun" :
                            $data['event']['day'] = "Chủ nhật";
                            break;
                    }
                }
            }
            $this->load->view('/event/view', $data);
        }
    }

    public function join($event_id) {
        $user_id = (int) $_SESSION['userLoggedIn']['id'];
        $data['event'] = $this->eventmodel->getEventById($event_id);
        if (isset($data['event']) && $data['event'] != "") {
            if ($data['event']['not_participation'] != "") {
                $not_participation = explode(',', $data['event']['not_participation']);
                if ($this->_inArray($user_id, $not_participation)) {
                    $result['error'] = 1;
                    $result['message'] = "Bạn đã từ chối tham gia sự kiện này.";
                }
            }
            //var_dump($result);die();		
            if (!isset($result['error'])) {
                if ($data['event']['participation'] != "") {
                    $participation = explode(',', $data['event']['participation']);
                    if ($this->_inArray($user_id, $participation)) {
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã đăng ký tham gia sự kiện này.";
                    }
                    if (!isset($result['error'])) {
                        $arr['participation'] = $data['event']['participation'] . "," . $user_id;
                    }
                } else {
                    $arr['participation'] = $user_id;
                }
                if (isset($arr['participation']) && $arr['participation'] != "") {
                    $this->eventmodel->update($event_id, $arr);
                    $result['status'] = 1;
                    $result['message'] = "OK";
                }
            }
        } else {
            $result['error'] = 1;
            $result['message'] = "Không tìm thấy thông tin về sự kiện. Vui lòng thử lại sau.";
        }
        echo json_encode($result);
    }

    public function notjoin($event_id) {
        $user_id = (int) $_SESSION['userLoggedIn']['id'];
        $data['event'] = $this->eventmodel->getEventById($event_id);
        if (isset($data['event']) && $data['event'] != "") {
            if ($data['event']['participation'] != "") {
                $participation = explode(',', $data['event']['participation']);
                if ($this->_inArray($user_id, $participation)) {
                    $result['error'] = 1;
                    $result['message'] = "Bạn đã đăng ký tham gia sự kiện này.";
                }
            }
            //var_dump($result);die();		
            if (!isset($result['error'])) {
                if ($data['event']['not_participation'] != "") {
                    $not_participation = explode(',', $data['event']['not_participation']);
                    if ($this->_inArray($user_id, $not_participation)) {
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã từ chối tham gia sự kiện này.";
                    }
                    if (!isset($result['error'])) {
                        $arr['not_participation'] = $data['event']['not_participation'] . "," . $user_id;
                    }
                } else {
                    $arr['not_participation'] = $user_id;
                }
                if (isset($arr['not_participation']) && $arr['not_participation'] != "") {
                    $this->eventmodel->update($event_id, $arr);
                    $result['status'] = 1;
                    $result['message'] = "OK";
                }
            }
        } else {
            $result['error'] = 1;
            $result['message'] = "Không tìm thấy thông tin về sự kiện. Vui lòng thử lại sau.";
        }
        echo json_encode($result);
    }

    private function _inArray($num, $arr) {
        for ($i = 0; $i < count($arr); $i++) {
            if ($num == $arr[$i]) {
                return true;
            }
        }
        return false;
    }

    public function manage($page = 0, $isAjax = FALSE, $eventId = NULL) {
        $this->load->helper('frontend');
        $this->load->helper('user_helper');
        if ($eventId) {
            $data['events'] = $this->eventmodel->getEvents(18, $page * 18);
        } else {
            $data['events'] = $this->eventmodel->getEvents(18, $page * 18);
        }
        for ($i = 0; $i < count($data['events']); $i++) {
            $data['event'] = $data['events'][$i];
            // Get số người tham gia sự kiện
            if (!empty($data['event'])) {
                if (empty($data['event']['image'])) {
                    $data['event']['image'] = 'theme/images/sample/event/340x184.jpg';
                }
                if (isset($data['event']['not_participation']) && $data['event']['not_participation'] != "") {
                    $notpar_list = explode(',', $data['event']['not_participation']);
                    if ($this->_inArray((int) $_SESSION['userLoggedIn']['id'], $notpar_list)) {
                        $data['event']['current_not_participation'] = 1;
                    }
                }
                if ($data['event']['type'] == 1) {
                    $company_id = $data['event']['cid'];
                    $data['company'] = $this->companymodel->getCompanyById($company_id);
                    $company_check = $this->companymodel->getCompanyByUserId((int) $_SESSION['userLoggedIn']['id']);
                    if (isset($company_check) && $company_check != "") {
                        if ($company_id == $company_check['company_id']) {
                            $data['event']['current_user'] = 1;
                        }
                    }
                } else {
                    $booth_id = $data['event']['cid'];
                    $data['booth'] = $this->boothmodel->getBoothById($booth_id);
                    $booth_check = $this->boothmodel->getBoothByUserId((int) $_SESSION['userLoggedIn']['id']);
                    if (isset($booth_check) && $booth_check != "") {
                        if ($booth_id == $booth_check['id']) {
                            $data['event']['current_user'] = 1;
                        }
                    }
                }
                if (isset($data['event']['participation']) && $data['event']['participation'] != "") {
                    $par_list = explode(',', $data['event']['participation']);
                    if ($this->_inArray((int) $_SESSION['userLoggedIn']['id'], $par_list)) {
                        $data['event']['current_participation'] = 1;
                    }
                    $data['event']['count'] = count($par_list);
                    if ($data['event']['count'] < 10) {
                        $data['event']['count'] = "0" . $data['event']['count'];
                    }
                } else {
                    $data['event']['count'] = 0;
                }
                $date = date('D', strtotime($data['event']['time_event']));
                $data['event']['time_event'] = date('h:m d/m/Y', strtotime($data['event']['time_event']));
                switch ($date) {
                    case "Mon" :
                        $data['event']['day'] = "Thứ 2";
                        break;
                    case "Tue" :
                        $data['event']['day'] = "Thứ 3";
                        break;
                    case "Wed" :
                        $data['event']['day'] = "Thứ 4";
                        break;
                    case "Thu" :
                        $data['event']['day'] = "Thứ 5";
                        break;
                    case "Fri" :
                        $data['event']['day'] = "Thứ 6";
                        break;
                    case "Sat" :
                        $data['event']['day'] = "Thứ 7";
                        break;
                    case "Sun" :
                        $data['event']['day'] = "Chủ nhật";
                        break;
                }
            }
            $data['events'][$i] = $data['event'];
            if (!isset($data['events'][$i]['image'])) {
                $data['events'][$i]['image'] = 'theme/images/sample/event/340x184.jpg';
                ;
            }
            $data['events'][$i]['comments'] = $this->event_comment_model->getCommentByEventId($data['events'][$i]['id']);
            $data['events'][$i]['count_comments'] = count($data['events'][$i]['comments']);
            if ($data['events'][$i]['count_comments'] < 10) {
                $data['events'][$i]['count_comments'] = "0" . $data['events'][$i]['count_comments'];
            }
        }
        $data['user'] = $this->usermodel->getUserByid((int) $_SESSION['userLoggedIn']['id']);
        if ($page) {
            $data['extra'] = true;
        }

        if ($isAjax) {
            $this->load->view('event/manage', $data);
        } else {
            $this->_data['content'] = $this->load->view('event/manage', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        }
    }

    public function comment($user_id = null, $event_id = null, $comment = null) {
        $data['user_id'] = $user_id;
        $data['event_id'] = $event_id;
        $data['comment'] = $comment;
        $this->event_comment_model->add($data);
    }
}
